package javabase.base.client01;

/**
 * @author chengshuai
 * @date 2021/4/24 22:23
 *
 * 01-Integer比较问题？
 *
 * 主要就三个知识
 * 1、int和Integer比较是拆箱比较
 * 2、两个Integer用=比较就是地址
 * 3、直接赋值，默认调用valueOf方法，先从缓存中得到，得不到就直接new一个新的
 * 所以比较超过127的值，用=就是比较地址，这种缓存池中没有（缓存池-128-127），就直接创建新的，返回flase
 */
public class Test01 {

    public static void main(String[] args) {
        f1();
        f2();
        f3();
    }

    /**
     * 3、直接赋值，默认调用valueOf方法
     * 先从缓存池中得到，得不到就直接new一个新的
     */
    public static void f3() {
        Integer i = 128;
        Integer i1 = 128;
        System.out.println(i == i1);
    }

    /**
     * 2、Integer 直接等于数字如果在-128到127之间会保存到常量池，
     * 而直接new出来的是对象，所以不相等
     * 两个对象直接比较内存地址，这个肯定不相等
     */
    public static void f2() {
        Integer i = new Integer(10);
        Integer i1 = new Integer(10);
        System.out.println(i == i1);
    }

    /**
     * 1、Integer和int比较会进行自动拆箱，比较的是大小
     */
    public static void f1() {
        int i = 5000;
        Integer i1 = new Integer(5000);
        System.out.println(i == i1);
    }

}
